function Dog(name){
	this.name = name || "";
	Dog.prototype = {
		constructor : Dog,
		name : "haha",
		show : function(){
			alert("this is refer to dog.proto : " + (this==Dog.prototype));
			alert( "name is " + this.name);
		}
	};
//	Dog.obj = {
//		show : function(){
//			alert("dog.obj");
//		}
//	};
//	Dog.prototype.show();
//Dog.prototype.show = function(){
//	alert("this is refer to dog.proto : " + (this==Dog.prototype));
//	alert( "real proto name is " + this.name);
//};
};
//Dog.prototype = {
//	show : function(){
//		alert( "name is " + this.name);
//	}
//};
//var dog1 = new Dog("xx");
//alert(dog1._proto_);
//alert(Dog.prototype.constructor ==	 dog1.constructor);
//alert(Dog == dog1.constructor);
//alert(Dog.constructor == Function.constructor);
//alert(Function.constructor == Function.prototype.constructor);
//dog1.show();
//dog1.shout();
alert("调用前 dog.proto.show : " + Dog.prototype.show);
alert(Dog.name);
var dog1 = new Dog("Dog 2");
alert("调用后1 dog.proto.show : " + Dog.prototype.show);
var dog2 = new Dog("Dog 2");
alert("调用后2 dog.proto.show :  : " + Dog.prototype.show);
alert("constructor Dog : "+(Dog.prototype.constructor == Dog));
Dog.prototype.show();
dog2.show();
Dog.prototype = {};
dog1.show();


/*
 * 楼主好, 我看了你的代码有点不同的理解 还请指教

说实话,楼主举例的什么_proto_那段:
// Dog.prototype = {constructor: Dog};
var o = {__proto__: Dog.prototype};
// 此时，o = {__proto__: {constructor: Dog}}
Dog.apply(o);
// 此时，Dog.prototype = {shout: function(){...}}
return o;
真没看太懂什么意思.

开篇里的那只DOG对象的定义, 我倒是觉这样: js存储变量prototype chain的被阻断, 为什么这么说呢?
构造函数里,把Dog.prototype当做了Dog一个"private变量", 如同定义的Dog.name一样了,阻断了Dog变量prototype chain更新, 使得后面new的dog1不能正确访问chain,
而执行过一次Dog()后, 
好比这样:
function Dog(name){
	this.name = name
	Dog.prototype = {
		constructor : Dog,
		name : "haha",
		show : function(){
			alert( "name is " + this.name);
		}
	};
	Dog.prototype.show();
};
*/